1 /* 2 * The Apache Software License, Version 1.1 3 * 4 * Copyright (c) 2002 The Apache Software Foundation. All rights 5 * reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in 16 * the documentation and/or other materials provided with the 17 * distribution. 18 * 19 * 3. The end-user documentation included with the redistribution, 20 * if any, must include the following acknowledgment: 21 * "This product includes software developed by the 22 * Apache Software Foundation (http://www.apache.org/)." 23 * Alternately, this acknowledgment may appear in the software itself, 24 * if and wherever such third-party acknowledgments normally appear. 25 * 26 * 4. The names "Apache" and "Apache Software Foundation" must 27 * not be used to endorse or promote products derived from this 28 * software without prior written permission. For written 29 * permission, please contact apache@apache.org. 30 * 31 * 5. Products derived from this software may not be called "Apache", 32 * nor may "Apache" appear in their name, without prior written 33 * permission of the Apache Software Foundation. 34 * 35 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 36 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 37 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 38 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 41 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 42 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 43 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 44 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 45 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 46 * SUCH DAMAGE. 47 * ==================================================================== 48 * 49 * This software consists of voluntary contributions made by many 50 * individuals on behalf of the Apache Software Foundation. For more 51 * information on the Apache Software Foundation, please see 52 * <http://www.apache.org/>;. 53 */ 54 package net.sf.cglib.transform.impl; 55 56 import net.sf.cglib.transform.*; 57 import net.sf.cglib.core.Constants; 58 import net.sf.cglib.core.ReflectUtils; 59 import net.sf.cglib.beans.*; 60 import java.util.*; 61 import java.lang.reflect.Method; 62 import junit.framework.*; 63 import org.objectweb.asm.Type; 64 65 /*** 66 * @version $Id: TestTransformingLoader.java,v 1.3 2003/12/20 23:22:11 herbyderby Exp $ 67 */ 68 public class TestTransformingLoader extends net.sf.cglib.CodeGenTestCase { 69 70 private static final ClassFilter TEST_FILTER = new ClassFilter() { 71 public boolean accept(String name) { 72 System.err.println("Loading " + name); 73 return name.startsWith("net.sf.cglib."); 74 } 75 }; 76 77 private ClassTransformer getExampleTransformer(String name, Type type) { 78 return new AddPropertyTransformer(new String[]{ name }, new Type[]{ type }); 79 } 80 81 public void testExample() throws Exception { 82 ClassTransformer t1 = getExampleTransformer("herby", Constants.TYPE_STRING); 83 ClassTransformer t2 = getExampleTransformer("derby", Type.DOUBLE_TYPE); 84 ClassTransformer chain = new ClassTransformerChain(new ClassTransformer[]{ t1, t2 }); 85 Class loaded = loadHelper(chain, Example.class); 86 Object obj = loaded.newInstance(); 87 String value = "HELLO"; 88 loaded.getMethod("setHerby", new Class[]{ String.class }).invoke(obj, new Object[]{ value }); 89 assertTrue(value.equals(loaded.getMethod("getHerby", null).invoke(obj, null))); 90 91 loaded.getMethod("setDerby", new Class[]{ Double.TYPE }).invoke(obj, new Object[]{ new Double(1.23456789d) }); 92 } 93 94 private static Class inited; 95 96 public static void initStatic(Class foo) { 97 System.err.println("INITING: " + foo); 98 } 99 100 public void testAddStatic() throws Exception { 101 Method m = ReflectUtils.findMethod("net.sf.cglib.transform.impl.TestTransformingLoader.initStatic(Class)"); 102 ClassTransformer t = new AddStaticInitTransformer(m); 103 // t = new ClassTransformerChain(new ClassTransformer[]{ t, new ClassTransformerTee(new org.objectweb.asm.util.TraceClassVisitor(null, new java.io.PrintWriter(System.out))) }); 104 Class loaded = loadHelper(t, Example.class); 105 Object obj = loaded.newInstance(); 106 // TODO 107 } 108 109 public void testInterceptField() throws Exception { 110 ClassTransformer t = new InterceptFieldTransformer(new InterceptFieldFilter() { 111 public boolean acceptRead(Type owner, String name) { 112 return true; 113 } 114 public boolean acceptWrite(Type owner, String name) { 115 return true; 116 } 117 }); 118 Class loaded = loadHelper(t, Example.class); 119 // TODO 120 } 121 122 public void testFieldProvider() throws Exception { 123 ClassTransformer t = new FieldProviderTransformer(); 124 Class loaded = loadHelper(t, Example.class); 125 // TODO 126 // FieldProvider fp = (FieldProvider)loaded.newInstance(); 127 // assertTrue(((Integer)fp.getField("example")).intValue() == 42); 128 // fp.setField("example", new Integer(6)); 129 // assertTrue(((Integer)fp.getField("example")).intValue() == 6); 130 // assertTrue(fp.getField("example") == null); 131 // try { 132 // fp.getField("dsfjkl"); 133 // fail("expected exception"); 134 // } catch (IllegalArgumentException ignore) { } 135 } 136 137 private static Class loadHelper( final ClassTransformer t, Class target) throws ClassNotFoundException { 138 ClassLoader parent = TestTransformingLoader.class.getClassLoader(); 139 TransformingClassLoader loader = new TransformingClassLoader(parent, TEST_FILTER, 140 141 new ClassTransformerFactory(){ 142 public ClassTransformer newInstance(){ 143 return t; 144 } 145 } 146 147 ); 148 return loader.loadClass(target.getName()); 149 } 150 151 public TestTransformingLoader(String testName) { 152 super(testName); 153 } 154 155 public static void main(String[] args) { 156 junit.textui.TestRunner.run(suite()); 157 } 158 159 public static Test suite() { 160 return new TestSuite(TestTransformingLoader.class); 161 } 162 163 }

This page was automatically generated by Maven